package cn.tedu.overhaul.management.controller;


import cn.tedu.overhaul.management.config.TencentUtil;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;


import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Slf4j
@RestController
public class UploadController {
    /*文本文件保存在数据库中,图片保存在磁盘中,在数据库中保存文本数据的同时,保存图片的
     * 路径以此建立联系*/

    @Autowired
    private TencentUtil tencentUtil; // 注入 COS 客户端



    //上传文件有默认大小的限制,默认为1兆,超过会报错需要在application里面去配置更改
    //用MultipartFile对象接收,并且参数名要和页面设置的name参数名称要一致
    @RequestMapping("/upload")
    public String upload(@RequestParam("picFile") MultipartFile picFile) throws IOException {
        COSClient cosClient = tencentUtil.tencentStart();
        String bucketName = tencentUtil.getBucketName();

        //得到文件的原始文件名
        String fileName=picFile.getOriginalFilename();
        log.debug("文件的原始文件名:{}",fileName);
        //为了防止图片的名字相同导致的覆盖,需要设置唯一性名字,做以下操作
        //得到文件名后缀   最后一个点的位置截取到最后即a.jpg得到.jpg
        String suffix=fileName.substring(fileName.lastIndexOf("."));
        //后缀得到后,得到唯一文件名   UUID.randomUUID()获得一个字符串类型的唯一标识符
        fileName= UUID.randomUUID()+suffix;
        log.debug("设置唯一性后的文件名:{}",fileName);
        //保存到磁盘中
        //准备文件夹路径
       // String dirPath="d:/files";

        //腾讯云的储存桶
        SimpleDateFormat f = new SimpleDateFormat("yyyy/MM/dd/");
        String datePath = f.format(new Date()); //java.util中的Date

        File localFile = null;
        try {
            //将 MultipartFile 类型 转为 File 类型
            localFile = File.createTempFile("temp",null);
            picFile.transferTo(localFile);
        }catch (IOException e){
            System.out.println("错误");
        }

        // 构造 COS 存储桶中的文件路径
        String cosFilePath = datePath + fileName;
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, cosFilePath, localFile);
        // 上传文件到 COS 存储桶
        PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
        return tencentUtil.getPath()+cosFilePath;


       /* //准备一个和日期相关的路径
        //yyyy年 MM月 dd日 意思就是我准备一个这个格式,给我生成一个这个格式的年月日
        SimpleDateFormat f=new SimpleDateFormat("/yyyy/MM/dd/");
        //new Date()得到的是当前的系统时间
        String datePath=f.format(new Date());//java.util中的Date

        //创建文件夹
        //d:/files/yyyy/MM/dd/
        File dirFile=new File(dirPath+datePath);
        if(!dirFile.exists()){//这个路径的文件夹如果不存在,则创建
            dirFile.mkdirs();
        }

        //把接收到的文件保存到上面的文件夹下面   d:/files/yyyy/MM/dd/xxxx.jpg
        picFile.transferTo(new File(dirPath+datePath+fileName));

        ///yyyy/MM/dd/xxxx.jpg返回这个路径给remove发请求当参数用
        return datePath+fileName;*/
    }

    @RequestMapping("/remove")
    public void remove(@RequestParam("url") String url){
        String appId="1318867653";

        COSClient cosClient = tencentUtil.tencentStart();
        String bucketName = tencentUtil.getBucketName();
        log.debug("桶的名称是:{}",bucketName);
        log.debug("参数为:{}",url);
        String cosFilePath = url.substring(63);
        log.debug("截取到的路径为:{}",cosFilePath);
        // 指定要删除的 bucket 和路径
        try {
            cosClient.deleteObject(bucketName, cosFilePath);
            System.out.println("删除成功");
        } catch (Throwable tb) {
            System.out.println("删除文件失败");
            tb.printStackTrace();
        }
    }

}
